package fp.grados.tipos;

import fp.grados.excepciones.ExcepcionEspacioNoValido;

public class EspacioImpl implements Espacio {

	//Atributos:
	private TipoEspacio tipoEspacio;
	private String nombre;
	private Integer capacidad;
	private Integer planta;
	
	//Constructor
	public EspacioImpl (TipoEspacio tipoEspacio, String nombre, Integer capacidad, Integer planta){
		
		if(capacidad <= 0){
			throw new ExcepcionEspacioNoValido("la capacidad del tipo de espacio debe ser mayor o igual a 0");
		}
		this.tipoEspacio = tipoEspacio;
		this.nombre = nombre;
		this.capacidad = capacidad;
		this.planta = planta;
	}
	
	
	
	//get & set!
	public TipoEspacio getTipoEspacio() {
		return this.tipoEspacio;
	}

	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Integer getCapacidad() {
		return this.capacidad;
	}

	public void setCapacidad(Integer capacidad) {
		if(capacidad <= 0){
			throw new ExcepcionEspacioNoValido("la capacidad del tipo de espacio debe ser mayor o igual a 0");
		}
		this.capacidad = capacidad;
	}

	public Integer getPlanta() {
		return this.planta;
	}

	//toString
	public String toString(){
		return getNombre() + " (" + getPlanta() + ")";
	}
	
	//Igualdad
	public boolean equals (Object o){
		boolean res = false;
		if(o instanceof Espacio){
			Espacio e = (Espacio) o;
			res = getNombre().equals(e.getNombre()) && getPlanta().equals(e.getPlanta());
		}
		return res;
	}
	
	
	public int hashCode(){
		return getNombre().hashCode() + getPlanta().hashCode() * 31;
	}
	
	//Ordeancion natura por planta a igualdad por nombre
	public int compareTo(Espacio e){
		int res = getPlanta().compareTo(getPlanta());
		if(res == 0){
			res = getNombre().compareTo(getNombre());
		}
		return res;
	}
}
